#ifndef PARAFLUIDATOM_H
#define PARAFLUIDATOM_H

#include "parafluidsubstance.h"
#include "parafluidvector.h"

#include <QDataStream>

namespace ParaFluid
{
	
	/**
	* Fluid Simulation Atom
	*/
	class Atom
	{
		
	public:
		
		/**
		* Destructor
		*/
		virtual ~Atom();
		
		/**
		* Default Constructor
		*/
		Atom();
		
		/**
		* Constructor with Position and Substance
		*/
		Atom(const Vector & position, const Substance & substance);
		
		/**
		* Copy Constructor
		*/
		Atom(const Atom & other);
		
		/**
		* Assignment Operator
		*/
		Atom & operator= (const Atom & rhs);
		
		/**
		* Comparison Operator
		*/
		bool operator== (const Atom & rhs) const;
				
		/**
		* Substance
		*/
		Substance substance;
		
		/**
		* Density
		*/
		float currentDensity;
		
		/**
		* Force
		*/
		Vector currentForce;
		
		/**
		* Current position
		*/
		Vector currentPosition;
		
		/**
		* Previous Position
		*/
		Vector previousPosition;
		
		/**
		* Next Position
		*/
		Vector nextPosition;
		
	};
	
}

QDataStream & operator<< (QDataStream & stream, const ParaFluid::Atom & atom);

QDataStream & operator>> (QDataStream & stream, ParaFluid::Atom & atom);

#endif
